package com.kmxd.ams.client.arrange;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kmxd.ams.client.arrange.dto.*;
import com.kmxd.ams.client.arrange.vo.UploadImportDataVO;
import com.kmxd.ams.client.arrange.vo.UploadImportVO;
import com.kmxd.ams.core.common.enums.SummaryTypeEnum;
import com.kmxd.ams.infra.arrange.base.BaseBO;
import com.kmxd.ams.infra.arrange.entity.Volume;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 案卷级 服务类
 *
 * @author ZuoLG
 * @since 2022-07-20
 */
public interface IVolumeSvc extends IService<Volume> {

  /**
   * 分页查询
   *
   * @param reqPage
   * @param req
   * @return
   */
  Page<Volume> selectPage(Page reqPage, Volume req);

  /**
   * 查询列表
   *
   * @param req
   * @return
   */
  List<Volume> selectList(Volume req);
  List<Volume> selectListWithNoDataScope(Volume req);

    List<Volume> listNoDataScope(Wrapper<Volume> wrapper);

    /**
   * 根据ids列表查询对象
   *
   * @param ids
   * @return
   */
  List<Volume> selectListByIds(Set<Long> ids);

  List<Volume> selectListByProjIds(Volume req);
  /**
   * 新增
   *
   * @param req
   */
  void add(Volume req);

  /**
   * 修改
   *
   * @param req
   */
  void edit(Volume req);

  void summary(Volume req);

  /**
   * 删除
   *
   * @param req
   */
  void remove(DetachDTO req);

  /**
   * 查看
   *
   * @param req
   * @return
   */
  Volume view(Volume req);

  long count(Volume req);

  void copy(VolumeCopyDTO req);

  /**
   * 卷内汇总
   *
   * <p>开始日期：案卷内文件日期最小值 截止日期：案卷内文件日期最大值 文件件数：案卷内文件目录的总数 总页数：案卷内文件目录的页数合计
   *
   * @param req
   */
  void summary(VolumeSummaryDTO req);

  /**
   * 移动案卷到待整理
   * @param req
   */
  void changeStatus(VolumeChangeStatusDTO req);

  String getSequence(Map<String, Object> columnMap, String tableId, boolean onlyArchived);

  /**
   * 删除回收站
   *
   * @param req
   * @return
   */
  Boolean cleanTrash(OptVolumeDTO req);

  /**
   * 数据还原
   *
   * @param req
   * @return
   */
  Boolean recoveryData(OptVolumeDTO req);

  /**
   * 查询导出数据
   *
   * @param req
   * @return
   */
  List<Map<String, Object>> selectExport(DataExportDTO req);

  /**
   * 文件上传导入
   *
   * @param req
   * @return
   * @throws Exception
   */
  UploadImportVO importUpload(UploadImportFileDTO req) throws Exception;

  /**
   * 上传导入数据
   *
   * @param req
   * @return
   * @throws Exception
   */
  UploadImportDataVO importData(UploadImportDataDTO req) throws Exception;

  Object selectWithSummaryType(Volume req, String dbFieldKey, SummaryTypeEnum type);

  /**
   * 查询忽略全宗
   *
   * @param req
   * @return
   */
  List<Volume> selectListIgnoreFonds(BaseBO req);
}
